package cn.com.shopec.erp.stock.dao;

import java.util.List;

import cn.com.shopec.erp.common.orm.IHibernateEntityDao;
import cn.com.shopec.erp.stock.entity.ProductBarCode;
import cn.com.shopec.erp.stock.vo.ProductBarCodeVo;

/**
 * 
 * @ClassName: IProductBarCodeDao.java
 * @Description: 出入库条形码Dao层
 * @author: zengxuezhou
 * @date: 2017年1月17日 下午5:29:04
 */
public interface IProductBarCodeDao extends IHibernateEntityDao<ProductBarCode> {

	/**
	 * 根据入库单号（或出库单号）得到其条形码总数量
	 * @param productBarCode
	 * @return
	 */
	int getProductsCount(ProductBarCodeVo productBarCode);

	/**
	 * 根据入库单号（或出库单号）分页查询
	 * @param productBarCode
	 * @param pageCount
	 * @param pageSize
	 * @return
	 */
	List<ProductBarCodeVo> getProductsList(ProductBarCodeVo productBarCode, int pageCount, int pageSize);

	/**
	 * 删除条形码（硬删除）
	 * @param stockInProductId
	 */
	void deleteBarCodeForProductId(String stockInProductId);

	/**
	 * 根据条形码号得到其对象（查询出来的数据将是最新的条形码）
	 * @param codeNo
	 * @return
	 */
	ProductBarCode getNoStockOutBarCode(String codeNo);

	/**
	 * 添加条形码出库信息
	 * @param stockOutNo
	 * @param stockOutProductId
	 * @param productBarCodes
	 */
	void setBarCodeStockOut(ProductBarCode productBarCode, List<ProductBarCode> productBarCodes);

	/**
	 * 根据出库单商品编号移除条形码的出库信息
	 * @param stockOutProductId
	 */
	void cancelBarCodeStateStockOut(String stockOutProductId);
	/**
	 * 将该id外相同的code数据设置为无效数据，仅仅做历史信息（订单退货用）
	 * @param codeNo
	 * @param string 
	 */
	void setBarCodeEffectiveState(String id,String codeNo, int state);
	
	/**
	 * 按出库商品id查询(普通出库时用)
	 * @param stockOutNo
	 * @return
	 */
	List<Object[]> queryForStockOut(String stockOutProductId);

	/**
	 * 按入库商品id查询(普通入库时用)
	 * @param id
	 * @return
	 */
	List<Object[]> queryForStockIn(String stockInProductId);
	
	/**
	 * 按调拨编号，商品编号查询(调拨入库时用)
	 * @param stockOutNo
	 * @return
	 */
	List<Object[]> queryForStockTransfer(String transferNo, String prodNo);

	/**
	 * 修改条码信息（调拨用）
	 * @param stockInTypeNo
	 * @param whNo
	 * @param whName
	 */
	void updateProductBarCodeForTransfer(String stockInTypeNo, String whNo, String whName);
	

	
}
